'use strict';

import { Service } from 'egg';
/**
 * 类型服务类
 * 类型逻辑处理
 */
export default class CategoryService extends Service{
    /**
     * 查询一个类型
     * 参数：
     *  condition 检索条件
     * 输出：
     * {Object} data 查询结果数据结构
     * {Object} data.category_id 分类ID
     * {String} data.category_name 分类名称
     * {String} data.create_time 创建时间
     * {Object[]} data.sub_list 子分类列表
     * {String} data.sub_list.sub_id 子分类ID
     * {String} data.sub_list.sub_name 子分类名称
     * {String} data.sub_list.checked 是否已经关联
     * 过程：
     *  查询当前类型，以及所有二级类型，并对二级类型做以及关联的标识checked处理
     * 处理后返回成功结果处理逻辑，返回结果
     */
    async find_one(condition){
        const {ctx,app}=this;
        try {
            let category=await ctx.service.common.find_one(condition,"Category","category_id");
            let {SubCategory,Sub}=app.model;
            if(category&&category['category_id']){

                let subs=await Sub.findAll({
                    include:[{
                        model:SubCategory,
                        association:Sub.hasMany(SubCategory,{foreignKey:'sub_id'}),
                        required:false
                    }]
                })
                subs=JSON.parse(JSON.stringify(subs));
                console.log(subs);
                subs.forEach(ele=>{
                    ele['checked']=0;
                    if(ele['sub_categories']){
                        if(ele['sub_categories'].length>0){
                            if(ele['sub_categories'].filter(e=>{
                                return e['category_id']==category['category_id']
                            }).length>0){
                                ele['checked']=1;
                            }
                        }
                        delete ele['sub_categories']
                    }
                })
                category['sub_list']=subs;
                return ctx.helper.success_result("操作成功",category);
            }
            return ctx.helper.error_result("未找到数据");
        } catch (error) {
            return ctx.helper.error_result("查询出错");
        }
        
    }
    /**
     * 分页查询所有分类
     * 参数：
     *  condition 检索条件
     * 输出：
     * {Number} code 返回状态码 0失败  200成功
     * {String} message 返回状态对应提示消息
     * {Object[]} data 分类列表
     * {String} data.category_id 类型ID
     * {String} data.category_name 类型名称
     * {String} data.create_time 创建时间
     * {String} data.data_count 数据总数
     * {String} data.page_count 页码总数
     * {Number} data.category_id 类型ID
     * {String} data.category_name 类型名称
     * {String} data.create_time 类型名称
     * 过程：
     *  构建分页查询条件
     *  分页查询数据，分页结果处理逻辑，返回结果
     */
    async find_and_count_all(condition,order_condition,page){
        const {ctx}=this;
        try {
            return ctx.service.common.find_and_count_all(condition,order_condition,page,'Category');
        } catch (error) {
            return ctx.helper.error_result("查询出错");
        }
    }
    /**
     * 查询所有分类
     * 参数：
     *  condition 检索条件
     * 输出：
     * {Number} code 返回状态码 0失败  200成功
     * {String} message 返回状态对应提示消息
     * {Object} data 查询结果数据结构（is_page为1时为对象为0时则为数组）
     * {Object[]} data.data_info 分类列表
     * {String} data.data_info.category_id 类型ID
     * {String} data.data_info.category_name 类型名称
     * {String} data.data_info.create_time 创建时间
     * {String} data.data_count 数据总数
     * {String} data.page_count 页码总数
     * {Number} data.category_id 类型ID
     * {String} data.category_name 类型名称
     * {String} data.create_time 类型名称
     * 过程：
     *  构建查询条件
     *  查询数据，返回结果
     */
    async find_all(condition,order_condition){
        const {ctx}=this;
        try {
            return ctx.service.common.find_all(condition,order_condition,'Category');
        } catch (error) {
            return ctx.helper.error_result("查询出错");
        }
    }
}